home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / gtlayout-source.lha / LTP_CreateObjectNode.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  5.2 KB  |  313 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1996 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. ObjectNode *
  15. LTP_CreateObjectNode(LayoutHandle *handle,LONG type,ULONG id,STRPTR label)
  16. {
  17.     ObjectNode    *node;
  18.     ULONG         size,extra;
  19.  
  20.     switch(type)
  21.     {
  22. #ifdef DO_GAUGE_KIND
  23.  
  24.         case GAUGE_KIND:
  25.  
  26.             extra = sizeof(GaugeExtra);
  27.             break;
  28. #endif
  29.  
  30. #ifdef DO_TAPEDECK_KIND
  31.         case TAPEDECK_KIND:
  32.  
  33.             extra = sizeof(TapeDeckExtra);
  34.             break;
  35. #endif    /* DO_TAPEDECK_KIND */
  36.  
  37. #ifdef DO_LEVEL_KIND
  38.         case LEVEL_KIND:
  39.  
  40.             extra = sizeof(LevelExtra);
  41.             break;
  42. #endif    /* DO_LEVEL_KIND */
  43.  
  44.         case BUTTON_KIND:
  45.  
  46.             extra = sizeof(ButtonExtra);
  47.             break;
  48.  
  49.         case XBAR_KIND:
  50.         case YBAR_KIND:
  51.  
  52.             extra = sizeof(BarExtra);
  53.             break;
  54.  
  55.         case BOX_KIND:
  56.  
  57.             extra = sizeof(BoxExtra);
  58.             break;
  59.  
  60.         case FRAME_KIND:
  61.  
  62.             extra = sizeof(FrameExtra);
  63.             break;
  64.  
  65.         case PICKER_KIND:
  66.  
  67.             extra = sizeof(PickerExtra);
  68.             break;
  69.  
  70.         case INCREMENTER_KIND:
  71.  
  72.             extra = sizeof(IncrementerExtra);
  73.             break;
  74.  
  75.         case LISTVIEW_KIND:
  76.  
  77.             extra = sizeof(ListExtra);
  78.             break;
  79.  
  80.         case MX_KIND:
  81.  
  82.             extra = sizeof(RadioExtra);
  83.             break;
  84.  
  85.         case TEXT_KIND:
  86.  
  87.             extra = sizeof(TextExtra);
  88.             break;
  89.  
  90.         case NUMBER_KIND:
  91.  
  92.             extra = sizeof(NumberExtra);
  93.             break;
  94.  
  95.         case CYCLE_KIND:
  96.  
  97.             extra = sizeof(CycleExtra);
  98.             break;
  99.  
  100. #if defined(DO_POPUP_KIND) && defined(DO_BOOPSI_KIND)
  101.         case POPUP_KIND:
  102.  
  103.             extra = sizeof(PopupExtra);
  104.             break;
  105. #endif
  106.  
  107. #if defined(DO_TAB_KIND) && defined(DO_BOOPSI_KIND)
  108.         case TAB_KIND:
  109.  
  110.             extra = sizeof(TabExtra);
  111.             break;
  112. #endif
  113.  
  114.         case PALETTE_KIND:
  115.  
  116.             extra = sizeof(PalExtra);
  117.             break;
  118.  
  119.         case SLIDER_KIND:
  120.  
  121.             extra = sizeof(SliderExtra);
  122.             break;
  123.  
  124.         case SCROLLER_KIND:
  125.  
  126.             extra = sizeof(ScrollerExtra);
  127.             break;
  128.  
  129.         case INTEGER_KIND:
  130.  
  131.             extra = sizeof(IntegerExtra);
  132.             break;
  133.  
  134.         case FRACTION_KIND:
  135.         case PASSWORD_KIND:
  136.         case STRING_KIND:
  137.  
  138.             extra = sizeof(StringExtra);
  139.             break;
  140.  
  141.         case HORIZONTAL_KIND:
  142.         case VERTICAL_KIND:
  143.  
  144.             extra = sizeof(GroupExtra);
  145.             break;
  146.  
  147. #ifdef DO_BOOPSI_KIND
  148.         case BOOPSI_KIND:
  149.  
  150.             extra = sizeof(BOOPSIExtra);
  151.             break;
  152. #endif    /* DO_BOOPSI_KIND */
  153.  
  154.         default:
  155.  
  156.             extra = 0;
  157.             break;
  158.     }
  159.  
  160.     size = offsetof(ObjectNode,Special) + extra;
  161.  
  162.     if(node = LTP_Alloc(handle,size))
  163.     {
  164.         node->Type        = type;
  165.         node->Label        = label;
  166.         node->ID        = id;
  167.         node->PointBack    = node;
  168.  
  169.         switch(type)
  170.         {
  171.             case LISTVIEW_KIND:
  172.  
  173.                 node->LabelPlace                = PLACE_ABOVE;
  174.                 node->Lines                        = 1;
  175.                 node->Current                     = ~0;
  176.                 node->Special.List.LinkID        = -1;
  177.                 node->Special.List.AutoPageID    = -1;
  178.  
  179.                 break;
  180.  
  181.             case PASSWORD_KIND:
  182.             case STRING_KIND:
  183.  
  184.                 node->Special.String.LayoutHandle     = handle;
  185.                 node->Special.String.LinkID            = -1;
  186.                 node->Special.String.MaxChars        = 256;
  187.  
  188.                 break;
  189.  
  190.             case INTEGER_KIND:
  191.  
  192.                 node->Special.Integer.LayoutHandle    = handle;
  193.                 node->Min                            = -2147483647;
  194.                 node->Max                            = 2147483647;
  195.                 node->Special.Integer.MaxChars        = 11;
  196.  
  197.                 break;
  198. #ifdef DO_BOOPSI_KIND
  199.             case BOOPSI_KIND:
  200.  
  201.                 node->Special.BOOPSI.Link = NIL_LINK;
  202.                 break;
  203. #endif    /* DO_BOOPSI_KIND */
  204.  
  205. #ifdef DO_FRACTION_KIND
  206.             case FRACTION_KIND:
  207.  
  208.                 node->Special.String.LayoutHandle     = handle;
  209.                 node->Special.String.LinkID            = -1;
  210.                 node->Max                            = 2147483647;
  211.                 node->Special.String.MaxChars        = 12;
  212.  
  213.                 break;
  214. #endif
  215.  
  216. #ifdef DO_TAPEDECK_KIND
  217.             case TAPEDECK_KIND:
  218.  
  219.                 node->LabelPlace = PLACE_BELOW;
  220.                 break;
  221. #endif    /* DO_TAPEDECK_KIND */
  222.  
  223.             case MX_KIND:
  224.  
  225.                 node->LabelPlace                    = PLACE_RIGHT;
  226.                 node->Special.Radio.TitlePlace        = PLACETEXT_LEFT;
  227.                 node->Special.Radio.AutoPageID        = -1;
  228.  
  229.                 break;
  230. #if defined(DO_POPUP_KIND) && defined(DO_BOOPSI_KIND)
  231.             case POPUP_KIND:
  232.  
  233.                 node->Special.Popup.AutoPageID = -1;
  234.                 break;
  235. #endif
  236.  
  237. #if defined(DO_TAB_KIND) && defined(DO_BOOPSI_KIND)
  238.             case TAB_KIND:
  239.  
  240.                 node->Special.Tab.AutoPageID = -1;
  241.                 break;
  242. #endif
  243.             case CYCLE_KIND:
  244.  
  245.                 node->Special.Cycle.AutoPageID = -1;
  246.                 break;
  247.  
  248.             case SCROLLER_KIND:
  249.  
  250.                 node->Special.Scroller.Visible        = 2;
  251.                 node->Special.Scroller.RelVerify    = TRUE;
  252.                 node->Special.Scroller.Immediate    = TRUE;
  253.                 break;
  254.  
  255.             case SLIDER_KIND:
  256.  
  257.                 node->Special.Slider.LevelPlace        = PLACETEXT_LEFT;
  258.                 node->Special.Slider.LevelFormat    = (LocaleBase && LocaleBase->lb_SysPatches) ? "%lD" : "%ld";
  259.  
  260.                 break;
  261.  
  262.             case FRAME_KIND:
  263.  
  264.                 node->Special.Frame.DrawBox = TRUE;
  265.                 node->Special.Frame.Dummy.GadgetID = id;
  266.                 break;
  267.  
  268.             case BOX_KIND:
  269.  
  270.                 node->Special.Box.DrawBox = TRUE;
  271.                 break;
  272.  
  273.             case TEXT_KIND:
  274.  
  275.                 node->Special.Text.FrontPen = node->Special.Text.BackPen = -1;
  276.                 break;
  277.  
  278.             case HORIZONTAL_KIND:
  279.  
  280.                 node->Special.Group.Horizontal = TRUE;
  281.  
  282.                 /* Fall through to... */
  283.  
  284.             case VERTICAL_KIND:
  285.  
  286.                 node->Type            = GROUP_KIND;
  287.                 node->LabelPlace    = PLACE_IN;
  288. #ifdef NOT_FUNCTIONAL
  289.                 node->Special.Group.UseWidth = node->Special.Group.UseHeight = -1;
  290. #endif    // NOT_FUNCTIONAL
  291.                 break;
  292. #ifdef DO_LEVEL_KIND
  293.             case LEVEL_KIND:
  294.  
  295.                 node->Special.Level.LevelPlace    = PLACETEXT_LEFT;
  296.                 node->LabelPlace                = PLACE_LEFT;
  297.                 node->Special.Level.LevelFormat    = (LocaleBase && LocaleBase->lb_SysPatches) ? "%lD" : "%ld";
  298.  
  299.                 break;
  300. #endif    /* DO_LEVEL_KIND */
  301.  
  302. #ifdef DO_GAUGE_KIND
  303.             case GAUGE_KIND:
  304.  
  305.                 node->Special.Gauge.LastPercentage = -1;
  306.                 break;
  307. #endif    /* DO_GAUGE_KIND */
  308.         }
  309.     }
  310.  
  311.     return(node);
  312. }
  313.